9.4 Список Задач + Dependency Inversion Principle
4 из 4 шагов пройдено

 Список Задач + Dependency Inversion Principle

➡️Ссылка на репозиторий с кодом этого урока

Внедряем зависимость черезmain.dart

Cоздаём экземпляр SharedPreferencesService и "внедряем" его в ToDoViewModel.

Файл main.dart

import 'package:flutter/material.dart';  
import 'package:flutter_localstorage/services/shared_preferences_service.dart';    
import 'package:provider/provider.dart';    
import 'viewmodels/todo_viewmodel.dart';    
import 'views/todo_screen.dart';    
    
void main() {    
  runApp(    
    // Оборачиваем приложение в ChangeNotifierProvider    
    // Создаём экземпляр ViewModel и передаём вниз по дереву  
    ChangeNotifierProvider(    
      create: (context) => ToDoViewModel(    
        // 👉 СОЗДАЕМ и ВНЕДРЯЕМ зависимость здесь
        storageService: SharedPreferencesService(),    
      ),    
      child: const ToDoApp(),    
    ),    
  );    
}    
    
class ToDoApp extends StatelessWidget {    
  const ToDoApp({super.key});    
    
  @override    
Widget build(BuildContext context) {    
    // Используем Consumer    
    // MaterialApp будет перестраиваться при смене цветовой темы  
  return Consumer<ToDoViewModel>(    
      builder: (context, viewModel, child) {    
        return MaterialApp(    
          title: "Список Дел",    
          theme: ThemeData(    
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.cyan),    
            brightness: Brightness.light,    
          ),    
          darkTheme: ThemeData(    
            brightness: Brightness.dark,    
          ),    
          // Используем ViewModel для управления состоянием темы    
          // В зависимости от isDarkMode, выбираем тёмную или светлую тему         
          themeMode: viewModel.isDarkMode ? ThemeMode.dark : ThemeMode.light,    
          debugShowCheckedModeBanner: false,    
          home: const ToDoScreen(),    
        );    
      },    
    );    
  }    
}

🔥🔥🔥 В итоге, если нужно будет перейти на использование другого сервиса для работы с локальным хранилищем (например sqlite), сделать это будет очень просто и гибко! В следующем разделе занятий это реализуем!

Демонстрация работы приложения

Приложение так же прекрасно работает!


.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий